Language changes
This section enumerates the changes that have been made to Scheme since
the ``Revised3 report'' [#!R3RS!#] was published.
- Although implementations may extend Scheme, they must offer
a syntactic mode that adds no reserved words and preempts no lexical conventions
of Scheme.
- Implementations may report violations of
implementation restrictions.
- It is no longer specified whether the empty list counts as true
or as false in conditional expressions. It should be noted that the
IEEE standard for Scheme requires the empty list to count as true
[#!IEEEScheme!#].
- The sets defined by boolean?, pair?, symbol?,
number?, char?, string?, vector?, and procedure?
are required to be disjoint.
- The variables bound by a lambda, let, letrec,
and do must not contain duplicates.
- Nested begin expressions containing definitions are treated
as a sequence of definitions.
- The eqv? procedure is no longer required to be true of any
two empty strings or two empty vectors.
- The syntax of numerical constants has been changed, and the exactness
implied by each syntax has been specified.
- The semantics of many numerical procedures have been clarified.
- Rationalize has been restricted to two arguments and its
specification clarified.
- The number->string and string->number procedures
have been changed.
- Integer->char now requires an exact integer argument.
- The specification of the force procedure has been
weakened. The previous specification was unimplementable.
- Variables removed: t, nil.
- Procedures removed: approximate, last-pair.
- Procedures added: list?, peek-char.
- Syntaxes made essential: case, and, or,
quasiquote.
- Procedures made essential: